package com.common.valid;

import javax.validation.Constraint;
import javax.validation.ConstraintValidator;
import javax.validation.Payload;
import java.lang.annotation.*;

/**
 * @author mayifan
 * @version 1.0
 * @date 2024-08-27 21:02
 */
//@Target注解指可以用于方法、字段、注解类型、构造函数、参数以及类型使用处
@Target({ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR, ElementType.PARAMETER, ElementType.TYPE_USE})
//@Retention：指定注解的保留策略。在这个例子中，RetentionPolicy.RUNTIME表示注解将在运行时保留，因此可以通过反射机制访问注解。
@Retention(RetentionPolicy.RUNTIME)
//@Documented：表明使用此注解的元素将被Javadoc或类似工具记录。换句话说，这个注解将包含在生成的API文档中。
@Documented
//@Constraint：这个注解通常与Java的Bean Validation API结合使用，用来指定自定义的验证逻辑。
@Constraint(
        validatedBy = { ListValueConstraintValidator.class}
)
public @interface ListValue {
    String message() default "{com.common.valid.ListValue.message}";

    Class<?>[] groups() default {};

    Class<? extends Payload>[] payload() default {};

    int[] vals() default {};
}
